PROGRAM MAIN
  USE GLOBVAR
  USE INIT
  USE DATAMM 
  USE smm
  !USE smm2
  USE smmboot
  USE NRUTIL
  USE MATRIX
  USE PROBABILITY
  USE ars 
  USE ANNEALING
  !USE weight
  !USE LIKELIHOOD
  USE RANDOM
  USE MINIMIZATION,ONLY: BFGS
  USE SIMPLEX
  USE STATISTICS
  USE boots
  
  !USE MPI
  
IMPLICIT NONE
  REAL(8) :: theta(N_var),bound(N_var,2),theta_initial(N_var)
  REAL(8) :: mu,sig,aa,mm(n_mom),aa2,momm(n_boot,n_mom)!,winv(n_mom2,n_mom2)
  LOGICAL :: check
  
  INTEGER :: j,n,ierr,hz,tin,tout,k,i,jj,kk
  myid=0

  CALL INITIALIZE()
  CALL datam(mm)
  moment=mm
   OPEN(6424,file="data.out")
    DO i = 1,N_mom 
      WRITE(6424,'(200F16.8)') moment(i)
    END DO
   CLOSE(6424)
   !stop
  theta=0.0d0
  !kk=n_x_l0+3*N_levelf+n_x_eta+2
  !theta(kk+1:n_var)=0.0d0
  !theta(kk+n_levelf+1)=1.0d0

                                OPEN(1,file="initial.out")
                    DO j=1,SIZE(thetafix)
                       READ(1,fmt=*) thetafix(j)
                    END DO
                CLOSE(1)


                OPEN(1,file="initialpoint.out")
                    DO j=1,SIZE(theta)
                       READ(1,fmt=*) theta_initial(j)
                    END DO
                CLOSE(1)
        theta=theta_initial
        aa=mom(theta)
        !aa2=mom2(theta)
        !theta=theta_true!*0.90d0
       IF (myid==0) write(*,*) aa,aa2
      CALL BOOT(momm)
      momentboot=momm
      !call coun(theta,counter)
      
      DO i=1,n_boot
          moment(:)=momentboot(i,:)
          mmb(:)=mmboot(i,:)
          theta=theta_initial
          !IF (i-INT(I/2)*2==0) theta=theta_initial+0.02
          !IF (i-INT(I/2)*2==1) 
           DO j=1,n_var
               theta(j)=SAMPLE_UNIFORM(theta_initial(j)-0.02,theta_initial(j)+0.02)
               IF (j==3) theta(j)=SAMPLE_UNIFORM(theta_initial(j)-0.02,theta_initial(j)+0.08)
               IF (j==13) theta(j)=SAMPLE_UNIFORM(theta_initial(j)-0.02,theta_initial(j)+0.08)
           END DO

          CALL bfgs(theta,1.0d-4,1.0d-5,momb,0,.False.) 
          CALL Nelder_Meade(theta,1.0d-8,momb,0,2000)
          CALL Nelder_Meade(theta,1.0d-8,momb,0,2000)
          CALL Simulated_Annealing(50.0d0,0.80d0,30,theta,mom,150,0,(/1234,6284,123656+j,231365488/))
          CALL Nelder_Meade(theta,1.0d-8,momb,0,2000)
          CALL Nelder_Meade(theta,1.0d-8,momb,0,2000)
          thetaboot(i,:)=theta(:)
                    write(*,*) i

           OPEN(12,file="thetaboot.out")
             DO k=1,N_var
              WRITE(12,'(2000F32.12)') (thetaboot(j,k),j=1,i)
             END DO
           CLOSE(12) 

      END DO
      
           OPEN(12,file="thetaboot.out")
             DO i=1,N_var
              WRITE(12,'(2000F32.12)') (thetaboot(j,i),j=1,n_boot)
             END DO
           CLOSE(12) 


  
END PROGRAM MAIN
